#pragma once
#pragma managed
//////////////////////////////////////////////////////////////////////////
using namespace System;
//////////////////////////////////////////////////////////////////////////
NAMESPACE_BEGIN
//////////////////////////////////////////////////////////////////////////
/// <summary>
/// contour retrieval mode
/// </summary>
public enum class ContourRetrMode
{
	/// <summary>
	/// CV_RETR_EXTERNAL
	/// </summary>
	External = CV_RETR_EXTERNAL,
	/// <summary>
	/// CV_RETR_LIST
	/// </summary>
	List = CV_RETR_LIST,
	/// <summary>
	/// CV_RETR_CCOMP
	/// </summary>
	CComp = CV_RETR_CCOMP,
	/// <summary>
	/// CV_RETR_TREE
	/// </summary>
	Tree = CV_RETR_TREE,
};

/// <summary>
/// contour approximation method
/// </summary>
public enum class ContourApproxMethod
{
	/// <summary>
	/// CV_CHAIN_CODE
	/// </summary>
	Code = CV_CHAIN_CODE,
	/// <summary>
	/// CV_CHAIN_APPROX_NONE
	/// </summary>
	None = CV_CHAIN_APPROX_NONE,
	/// <summary>
	/// CV_CHAIN_APPROX_SIMPLE
	/// </summary>
	Simple = CV_CHAIN_APPROX_SIMPLE,
	/// <summary>
	/// CV_CHAIN_APPROX_TC89_L1
	/// </summary>
	TC89L1 = CV_CHAIN_APPROX_TC89_L1,
	/// <summary>
	/// CV_CHAIN_APPROX_TC89_KCOS
	/// </summary>
	TC89KCOS = CV_CHAIN_APPROX_TC89_KCOS,
	/// <summary>
	/// CV_LINK_RUNS
	/// </summary>
	LinkRuns = CV_LINK_RUNS,
};

/// <summary>
/// Subdiv2DPointLocation
/// </summary>
public enum class Subdiv2DPointLocation
{
	/// <summary>
	/// CV_PTLOC_ERROR
	/// </summary>
	Error = CV_PTLOC_ERROR,
	/// <summary>
	/// CV_PTLOC_OUTSIDE_RECT
	/// </summary>
	Outside = CV_PTLOC_OUTSIDE_RECT,
	/// <summary>
	/// CV_PTLOC_INSIDE
	/// </summary>
	Inside = CV_PTLOC_INSIDE,
	/// <summary>
	/// CV_PTLOC_VERTEX
	/// </summary>
	Vertex = CV_PTLOC_VERTEX,
	/// <summary>
	/// CV_PTLOC_ON_EDGE
	/// </summary>
	OnEdge = CV_PTLOC_ON_EDGE,
};

/// <summary>
/// NextEdgeType
/// </summary>
typedef enum class NextEdgeType
{
	/// <summary>
	/// CV_NEXT_AROUND_ORG
	/// </summary>
	NextAroundOrg   = CV_NEXT_AROUND_ORG,
	/// <summary>
	/// CV_NEXT_AROUND_DST
	/// </summary>
	NextAroundDst   = CV_NEXT_AROUND_DST,
	/// <summary>
	/// CV_PREV_AROUND_ORG
	/// </summary>
	PrevAroundOrg   = CV_PREV_AROUND_ORG,
	/// <summary>
	/// CV_PREV_AROUND_DST
	/// </summary>
	PrevAroundDst   = CV_PREV_AROUND_DST,
	/// <summary>
	/// CV_NEXT_AROUND_LEFT
	/// </summary>
	NextAroundLeft  = CV_NEXT_AROUND_LEFT,
	/// <summary>
	/// CV_NEXT_AROUND_RIGHT
	/// </summary>
	NextAroundRight = CV_NEXT_AROUND_RIGHT,
	/// <summary>
	/// CV_PREV_AROUND_LEFT
	/// </summary>
	PrevAroundLeft  = CV_PREV_AROUND_LEFT,
	/// <summary>
	/// CV_PREV_AROUND_RIGHT
	/// </summary>
	PrevAroundRight = CV_PREV_AROUND_RIGHT
};

/// <summary>
/// Defines for Distance Transform
/// </summary>
public enum class DistanceType
{
	/// <summary>
	/// User defined distance
	/// </summary>
	User = CV_DIST_USER,
	/// <summary>
	/// distance = |x1-x2| + |y1-y2|
	/// </summary>
	L1 = CV_DIST_L1,
	/// <summary>
	/// the simple euclidean distance
	/// </summary>
	L2 = CV_DIST_L2,
	/// <summary>
	/// distance = max(|x1-x2|,|y1-y2|)
	/// </summary>
	C = CV_DIST_C,
	/// <summary>
	/// L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1))
	/// </summary>
	L12 = CV_DIST_L12,
	/// <summary>
	/// distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998
	/// </summary>
	Fair = CV_DIST_FAIR,
	/// <summary>
	/// distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846
	/// </summary>
	Welsch = CV_DIST_WELSCH,
	/// <summary>
	/// distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345
	/// </summary>
	Huber = CV_DIST_HUBER,
};

/// <summary>
/// Filters used in pyramid decomposition
/// </summary>
public enum class FilterType
{
	Gaussian5x5 = CV_GAUSSIAN_5x5,
};

//////////////////////////////////////////////////////////////////////////
NAMESPACE_END